/***********************************************************************************************//**
*\n  @file       main.c
*\n  @brief      主程序
*\n  @details
*\n -----------------------------------------------------------------------------------
*\n  文件说明：
*\n       1. 主程序
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01   罗先能        2021.4.8          创建
*\n
***************************************************************************************************/

/**************************************************************************************************
* 头文件
***************************************************************************************************/
#include "hal.h"
#include "framework.h"
#include "app.h"
#include "main.h"

#undef   DEBUG_LEVEL
#define  DEBUG_LEVEL  5
#include "vdebug.h"

/**************************************************************************************************
* 宏定义、结构定义
***************************************************************************************************/


/**************************************************************************************************
* 全局变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有函数声明、定义
***************************************************************************************************/
#if 1
// Retrieve year info
#define OS_YEAR     ((((__DATE__ [7] - '0') * 10 + (__DATE__ [8] - '0')) * 10 \
                    + (__DATE__ [9] - '0')) * 10 + (__DATE__ [10] - '0'))

// Retrieve month info
#define OS_MONTH    (__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 1 : 6) \
                    : __DATE__ [2] == 'b' ? 2 \
                    : __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 3 : 4) \
                    : __DATE__ [2] == 'y' ? 5  \
                    : __DATE__ [2] == 'l' ? 7  \
                    : __DATE__ [2] == 'g' ? 8  \
                    : __DATE__ [2] == 'p' ? 9  \
                    : __DATE__ [2] == 't' ? 10 \
                    : __DATE__ [2] == 'v' ? 11 : 12)

// Retrieve day info
#define OS_DAY      ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \
                    + (__DATE__ [5] - '0'))

// Retrieve hour info
#define OS_HOUR     ((__TIME__ [0] - '0') * 10 + (__TIME__ [1] - '0'))

// Retrieve minute info
#define OS_MINUTE   ((__TIME__ [3] - '0') * 10 + (__TIME__ [4] - '0'))

// Retrieve second info
#define OS_SECOND   ((__TIME__ [6] - '0') * 10 + (__TIME__ [7] - '0'))


/*************************************************************************************//**
*\n 函数名称： get_build_time()
*\n 功能描述：
*\n            编译日期、时间转换为字符串
*\n 输入参数：
*\n            void
*\n 输出参数:
*\n
*\n 返 回 值:
*\n           日期时间的字符串
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.7.13     创建
*****************************************************************************************/
static char *get_build_time(void)
{
	static char time_str[32]; //= "YYYYMMDD-HHMMSS";

	for (int i = 0;  i < sizeof(time_str); ++i)
	{
		time_str[i] = 0;
	}
//  sprintf(time_str,"%02d%02d%02d", OS_YEAR%100, OS_MONTH, OS_DAY);
    sprintf(time_str, "%04d%02d%02d-%02d:%02d:%02d", OS_YEAR, OS_MONTH, OS_DAY, OS_HOUR, OS_MINUTE, OS_SECOND);

    return time_str;
}
#endif



/**************************************************************************************************
* 全局函数声明、定义
***************************************************************************************************/
int main(int argc, char *argv[])
{
#if 0
	printf("-----test gcc ---------------------------------------\n");
	printf("sizeof(char)   == %d\n",  (int)sizeof(int));
	printf("sizeof(int)    == %d\n",  (int)sizeof(int));
	printf("sizeof(long)   == %d\n",  (int)sizeof(long));
	printf("sizeof(long int)   == %d\n",  (int)sizeof(long int));
	printf("sizeof(long long) == %d\n", (int)sizeof(long long));
	printf("sizeof(float)  == %d\n", (int)sizeof(float));
	printf("sizeof(double) == %d\n", (int)sizeof(double));
	printf("sizeof(void*)  == %d\n", (int)sizeof(void*));

	printf("__STDC__ == %d\n", __STDC__);
	printf("__STDC_HOSTED__ == %d\n",  (int) __STDC_HOSTED__);
	printf("__STDC_VERSION__ == %d\n", (int) __STDC_VERSION__);
	printf("__FILE__ == %s\n", __FILE__);
	printf("__LINE__ == %d\n", __LINE__);
	printf("__DATE__ == %s\n", __DATE__);
	printf("__TIME__ == %s\n", __TIME__);

	debug_fatal (" debug_fatal()  color\n");
	debug_error (" debug_errror() color\n");
	debug_warn  (" debug_warn()   color\n");
	debug_info  (" debug_info()   color\n");
	debug_printf(" debug_printf() color\n");
	printf("-----test end --------------------------------------\n");
#endif

	printf(" Software Version: %s \n", SOFTWARE_VERSION);
	printf(" Build Date      : %s \n", get_build_time());


	int ret;
	ret = HalInit(argc, argv);
	ret = FrameworkInit(argc, argv);
	ret = AppInit(argc, argv);

	ret = HalStart(argc, argv);
	ret = FrameworkStart(argc, argv);
	ret = AppStart(argc, argv);

	return ret;
}

